# 定义颜色代码
RED='\033[0;31m'
NC='\033[0m' # No Color

# 定义退出处理函数，用于清理下载的文件
cleanup() {
    echo "清理下载的文件..."
    for file in /tmp/*; do
        if [ -f "$file" ]; then
            rm "$file"
        fi
    done
}

# 捕获退出信号，调用退出处理函数
trap cleanup EXIT

# 检查网络连接
echo "检查网络连接..."
ping -c 1 www.baidu.com > /dev/null 2>&1
if [ $? -ne 0 ]; then
    echo "网络连接失败，请检查您的网络设置。"
    exit 1
fi

echo "网络连接正常。"

# 循环允许用户选择文件并尝试打开
while true; do
    # 从config.txt文件中读取配置
    config_file="config.txt"
    if [ ! -f "$config_file" ]; then
        echo "配置文件$config_file不存在。"
        exit 1
    fi

    # 使用awk从config.txt中提取值
    gitee_api_url=$(awk -F ': ' '/gitee_api_url/ {print $2}' "$config_file" | tr -d '[:space:]')
    access_token=$(awk -F ': ' '/access_token/ {print $2}' "$config_file" | tr -d '[:space:]')
    git_script_url_prefix=$(awk -F ': ' '/git_script_url_prefix/ {print $2}' "$config_file" | tr -d '[:space:]')

    echo "读取的配置值："
    echo "gitee_api_url: $gitee_api_url"
    echo "access_token: $access_token"
    echo "git_script_url_prefix: $git_script_url_prefix"

    # 使用Gitee API获取仓库中的文件列表
    echo "查询Gitee仓库中的所有文件和文件夹..."
    response=$(wget -O - -q "$gitee_api_url?access_token=$access_token")

    # 检查wget命令是否成功执行
    if [ $? -ne 0 ]; then
        echo "无法从Gitee获取数据，请检查网络连接或URL。"
        echo "wget命令输出："
        echo "$response"
        echo -e "${RED}请检查网络连接或URL的合法性，并适当重试。${NC}"
    else
        # 使用jq解析JSON以获取name和download_url
        echo "仓库中的文件和文件夹列表："
        echo "$response" | jq '.[] | {name, download_url}'
    fi

    # 让用户选择文件
    read -p "请输入要打开的文件名称（例如：script.sh, README.md 或 example.txt），或按Ctrl+C退出：" file_name

    if [ -z "$file_name" ]; then
        echo "未输入文件名称，重新输入。"
        continue
    fi

    # 构建下载URL
    git_file_url="$git_script_url_prefix/$file_name"
    wget -O "/tmp/$file_name" "$git_file_url"

    # 检查是否成功下载文件
    if [ $? -ne 0 ]; then
        echo "文件下载失败，请检查URL或网络连接。"
    else
        # 根据文件类型执行不同的操作
        case "$file_name" in
            *.sh)
                # 给下载的脚本添加执行权限
                chmod +x "/tmp/$file_name"
                echo "运行下载的脚本..."
                bash "/tmp/$file_name"
                ;;
            *.md)
                echo "显示下载的Markdown文件内容..."
                if command -v pandoc > /dev/null; then
                    pandoc "/tmp/$file_name" -s -t plain
                else
                    cat "/tmp/$file_name"
                fi
                echo "" # 输出一个空行
                ;;
            *.txt)
                echo "显示下载的文本文件内容..."
                cat "/tmp/$file_name"
                echo "" # 输出一个空行
                ;;
            *)
                echo "不支持的文件类型。"
                ;;
        esac

        # 检查文件执行或显示结果
        if [ $? -ne 0 ]; then
            echo -e "${RED}文件执行或显示失败，可以重试或选择其他文件。${NC}"
        else
            echo "文件执行或显示成功。"
        fi
    fi

    # 提示用户是否继续
    read -p "文件执行或显示完毕，是否继续执行其他文件？(y/n): " continue_choice
    if [[ $continue_choice != [yY] ]]; then
        echo "程序退出。"
        break
    fi
done

# 调用退出处理函数，确保清理下载的文件
cleanup